Entity Framework (EF) ট্রানজেকশন ব্যবহারের জন্য একটি শক্তিশালী মেকানিজম সরবরাহ করে, যা আপনাকে একাধিক ডেটাবেস অপারেশনকে একত্রে একটানা কার্যকরী করতে সাহায্য করে। ট্রানজেকশন ব্যবহারের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে, একাধিক অপারেশন একযোগভাবে সফলভাবে সম্পন্ন হচ্ছে, অন্যথায় কোনো একটি অপারেশন ব্যর্থ হলে, পূর্বের সমস্ত অপারেশন রোলব্যাক (rollback) করা হবে, যাতে ডেটাবেসের অখণ্ডতা বজায় থাকে।
ট্রানজেকশন হল একটি অ্যাটমিক ইউনিট যা ডেটাবেসে এক বা একাধিক কার্যক্রম সম্পাদিত করে। একটি ট্রানজেকশনের প্রধান উদ্দেশ্য হল ডেটাবেসের অবস্থা সঠিক এবং অখণ্ড রাখা। এতে ৪টি মূল বৈশিষ্ট্য থাকে, যা ACID (Atomicity, Consistency, Isolation, Durability) নামক গুণাবলী হিসেবে পরিচিত।
Entity Framework এ ট্রানজেকশন ব্যবহারের জন্য মূলত DbContext ব্যবহার করা হয়। EF ডিফল্টভাবে প্রতি SaveChanges() কলের সময় একটি ট্রানজেকশন শুরু করে, কিন্তু আপনি যদি নিজস্ব ট্রানজেকশন নিয়ন্ত্রণ করতে চান, তবে DbContext.Database.BeginTransaction()
মেথড ব্যবহার করে এটি পরিচালনা করতে পারেন।
যখন আপনি SaveChanges()
মেথড কল করেন, EF স্বয়ংক্রিয়ভাবে একটি ট্রানজেকশন শুরু করে। যদি সব অপারেশন সফল হয়, তবে ট্রানজেকশন কমিট (commit) হয়, এবং যদি কোনো অপারেশন ব্যর্থ হয়, তবে সমস্ত পরিবর্তন রোলব্যাক (rollback) করা হয়।
using (var context = new YourDbContext())
{
var entity1 = new Entity1 { Property1 = "Value1" };
var entity2 = new Entity2 { Property2 = "Value2" };
context.Entity1s.Add(entity1);
context.Entity2s.Add(entity2);
// SaveChanges() স্বয়ংক্রিয়ভাবে ট্রানজেকশন পরিচালনা করবে
context.SaveChanges();
}
আপনি যদি একটি ট্রানজেকশনের মধ্যে একাধিক ডেটাবেস অপারেশন করতে চান, তাহলে আপনাকে BeginTransaction ব্যবহার করতে হবে। এই পদ্ধতিতে, আপনি ট্রানজেকশন শুরু, কমিট, এবং রোলব্যাক পরিচালনা করতে পারবেন।
using (var context = new YourDbContext())
{
// Explicitly start a transaction
using (var transaction = context.Database.BeginTransaction())
{
try
{
var entity1 = new Entity1 { Property1 = "Value1" };
var entity2 = new Entity2 { Property2 = "Value2" };
context.Entity1s.Add(entity1);
context.Entity2s.Add(entity2);
// Save changes within the transaction
context.SaveChanges();
// Commit the transaction
transaction.Commit();
}
catch (Exception)
{
// Rollback the transaction if any exception occurs
transaction.Rollback();
throw;
}
}
}
Asynchronous অপারেশনেও আপনি ট্রানজেকশন পরিচালনা করতে পারেন। SaveChangesAsync()
এবং BeginTransactionAsync()
মেথড ব্যবহার করে আপনি ব্যাকগ্রাউন্ডে ট্রানজেকশন পরিচালনা করতে পারেন।
using (var context = new YourDbContext())
{
// Explicitly start a transaction
using (var transaction = await context.Database.BeginTransactionAsync())
{
try
{
var entity1 = new Entity1 { Property1 = "Value1" };
var entity2 = new Entity2 { Property2 = "Value2" };
context.Entity1s.Add(entity1);
context.Entity2s.Add(entity2);
// Save changes asynchronously within the transaction
await context.SaveChangesAsync();
// Commit the transaction
await transaction.CommitAsync();
}
catch (Exception)
{
// Rollback the transaction if any exception occurs
await transaction.RollbackAsync();
throw;
}
}
}
যদি আপনি একাধিক ডেটাবেসে বা ডিস্ট্রিবিউটেড ট্রানজেকশন পরিচালনা করতে চান, তবে TransactionScope
ব্যবহার করা যেতে পারে। এটি একাধিক DbContext বা বিভিন্ন সিস্টেমে ডেটাবেস ট্রানজেকশন পরিচালনার জন্য উপযুক্ত।
using (var scope = new TransactionScope())
{
using (var context1 = new YourDbContext())
{
context1.Entity1s.Add(new Entity1 { Property1 = "Value1" });
context1.SaveChanges();
}
using (var context2 = new AnotherDbContext())
{
context2.Entity2s.Add(new Entity2 { Property2 = "Value2" });
context2.SaveChanges();
}
// Complete the transaction
scope.Complete();
}
Entity Framework এ ট্রানজেকশন ব্যবহারের মাধ্যমে আপনি একাধিক ডেটাবেস অপারেশনকে একত্রে সফলভাবে সম্পন্ন করতে পারেন, অথবা কোনো একটি অপারেশন ব্যর্থ হলে পুরো প্রক্রিয়া রোলব্যাক করতে পারেন। আপনি DbContext.Database.BeginTransaction()
বা TransactionScope
ব্যবহার করে স্বতন্ত্র ট্রানজেকশন তৈরি করতে পারেন, যা ডেটাবেসের অবস্থা অখণ্ড রাখার জন্য খুবই গুরুত্বপূর্ণ। EF ডিফল্টভাবে ট্রানজেকশন পরিচালনা করে, তবে আপনি প্রয়োজন অনুসারে এটি কাস্টমাইজ করতে পারেন।
common.read_more